public class LQB_03 {
    /**
     * 题目：0-2121之间，有多少个数可以表示成为：两个非负整数的平方差
     * 例：2021 = 45*45-2*2     9=3*3-0*0 = 5*5-4*4（答案不止一个时，只算一次
    * */
    public static void main(String[] args) {
        for (int i = 0; i < 1000000; i++) {
            if((i+1)*(i+1) - i*i == 2021){
                System.out.println("平方差的极限值为："+(i+1)+"*"+(i+1)+" - "+i+"*"+i+" = "+2021);
                System.out.println("两个数的非负整数，最大不会超过1011");
                break;
            }
        }
        System.out.println(2.56-2);
        int count = 0;
        for (int i = 1; i <= 2021; i++) {
            if (isExist2(i) == 0)
                count++;
        }
        System.out.println(count); //1516

    }
    // System.out.println(n + " = \t"+i+"*"+i+"\t - "+ (int)tag+"*"+(int)tag);
    static public int isExist1(Integer n) { // 0:存在  1：不存在
        int start = (int)Math.sqrt(n)-1;  //两个数的非负整数的平方差，最小不会小于sqrt(n)
        for (int i = start; i < 1011; i++) {
            double tag  = (double) (Math.sqrt(i*i - n));
            int    tag1 = (int)(Math.sqrt(i*i- n));
            if(tag == tag1){
                return 0;
            }
        }
        return 1;
    }
    static public int isExist2(Integer n) { // 0:存在  1：不存在
        int start = (int)Math.sqrt(n)-1;
        for (int i = start; i < 1011; i++) {
            double tag  =  Math.sqrt(i*i - n);
            if(tag == (int)tag){
                return 0;
            }
        }
        return 1;
    }
}
